home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / c / egem_210 / egem / source / cookie.c < prev    next >
C/C++ Source or Header  |  1995-11-25  |  2KB  |  124 lines

  1.  
  2. #include <string.h>
  3. #include "e_gem.h"
  4.  
  5. static     long *get_cookiejar(void);
  6.  
  7. void create_cookie (COOKIE *cookie, long id, long value)
  8. {
  9.     *((long *) cookie)++ = id;
  10.     *((long *) cookie)++ = value;
  11. }
  12.  
  13. boolean    new_cookie (COOKIE *entry)
  14. {
  15.     reg long *cookiejar = get_cookiejar();
  16.     reg int  act_row = 0;
  17.     
  18.     if (cookiejar)
  19.     {        
  20.         while (*cookiejar)
  21.         {
  22.             cookiejar+=2;
  23.             act_row++;
  24.         }
  25.         
  26.         if (act_row < cookiejar[1])
  27.         {
  28.             cookiejar[2] = cookiejar[0];
  29.             cookiejar[3] = cookiejar[1];
  30.             
  31.             *cookiejar++ = *((long *) entry)++;
  32.             *cookiejar++ = *((long *) entry)++;
  33.             return(TRUE);
  34.         }
  35.     }
  36.     return(FALSE);
  37. }
  38.  
  39. boolean    get_cookie (long cookie, long *value)
  40. {
  41.     reg long *cookiejar = get_cookiejar();
  42.     
  43.     if (cookiejar)
  44.     {
  45.         while (*cookiejar)
  46.         {
  47.             if (*cookiejar==cookie)
  48.             {
  49.                 if (value)
  50.                     *value = *++cookiejar;
  51.                 return(TRUE);
  52.             }
  53.             cookiejar += 2;
  54.         }
  55.     }
  56.     return(FALSE);
  57. }
  58.  
  59. void remove_cookie (long cookie_id)
  60. {
  61.     reg long *cookiejar = get_cookiejar();
  62.     
  63.     if (cookiejar)
  64.     {    
  65.         while (*cookiejar && *cookiejar!=cookie_id)
  66.             cookiejar += 2;
  67.         
  68.         if (*cookiejar)
  69.         {
  70.             do
  71.             {
  72.                 *cookiejar++ = cookiejar[2];
  73.                 *cookiejar++ = cookiejar[2];
  74.             } while (*cookiejar);
  75.         }
  76.     }
  77. }
  78.  
  79. void move_cookiejar (long *dest, long size)
  80. {
  81.     reg long old_stack,*cookiejar,*dest_cop=dest;
  82.     
  83.     old_stack = Super (NULL);
  84.     cookiejar = *((long **) 0x5a0l);
  85.  
  86.     if (cookiejar)
  87.         do
  88.         {
  89.             *dest++ = *cookiejar++;
  90.             *dest++ = *cookiejar++;
  91.         } while (*cookiejar);
  92.  
  93.     *dest++ = 0;
  94.     *dest    = size;
  95.         
  96.     cookiejar = (long *) 0x5a0l;
  97.     *cookiejar = (long) dest_cop;
  98.  
  99.     Super ((void *) old_stack);
  100. }
  101.  
  102. long cookie_size()
  103. {
  104.     reg long *cookiejar = get_cookiejar();
  105.     
  106.     if (cookiejar)
  107.     {
  108.         while (*cookiejar)
  109.             cookiejar+=2;
  110.         return(*++cookiejar);
  111.     }
  112.     return(0);
  113. }
  114.  
  115. static long *get_cookiejar()
  116. {
  117.     reg long old_stack,*jar;
  118.     
  119.     old_stack = Super (NULL);
  120.     jar = *((long **) 0x5a0l);
  121.     Super ((void *) old_stack);
  122.     return (jar);
  123. }
  124.